package partThree;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class BigDecimalFormat {
    public static void main(String[] args) {
        //公平舍入操作
        //System.out.println(formatToNumber(new BigDecimal("12333.435")));
        System.out.println(formatToNumber(new BigDecimal("0.44")));
        //货币格式化操作
        System.out.println("货币格式化操作"+ formatCurrencyInstance(new BigDecimal("1931567.895")));
        //百分比格式化操作
        System.out.println("百分比格式化操作"+formatPercentInstance(17153));
        System.out.println("百分比格式化操作"+formatPercentInstance(17153.951287));
    }

    public static String formatToNumber(BigDecimal obj){
        // DecimalFormat默认使用的是进位方式是RoundingMode.HALF_EVEN，此舍入模式也称为“银行算法”，主要在银行业务中使用。
        DecimalFormat df = new DecimalFormat("###,##0.00"); //0.44
        /*
         * new DecimalFormat(“###,##0.00”)小数点前面需要有个0
         * 这样0-1之间的数字才会正常格式化；若##0.00的小数点前面没有0
         * 则0-1之间的数字会被丢失掉小数点前的0
         * */
        //DecimalFormat df = new DecimalFormat("###,###.00"); //.44
        //return df.format(obj);

        //或者我们这里可以使用判断语句进行分条件的返回
        if(obj.compareTo(BigDecimal.ZERO)==0) {
            //如果输入的值为0则直接返回 0.00
            return "0.00";
        }else if(obj.compareTo(BigDecimal.ZERO)>0&&obj.compareTo(new BigDecimal(1))<0){
            //如果输入的值为0-1之间的值，那么输入结果前加一个字符“0”
            return "0"+df.format(obj).toString();
        }else {
            //其它结果由format方法自动返回
            return df.format(obj).toString();
        }

    }

    public static String formatCurrencyInstance(BigDecimal obj){
        NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用
        return currency.format(obj);
    }

    public static String formatPercentInstance(Object obj){
        NumberFormat percent = NumberFormat.getPercentInstance();  //建立百分比格式化引用
        percent.setMinimumFractionDigits(2);//设置数的小数部分所允许的最小位数(如果不足后面补0)
        percent.setMaximumFractionDigits(4);//设置数的小数部分所允许的最大位数(如果超过会四舍五入)
        return percent.format(obj);
    }
}
